package com.algorithm.order;

/**
 *  冒泡排序 稳定
 * 时间复杂度
 * 空间复杂度
 * 最好的情况
 * 最坏的情况
 *
 * @auth &{zhujiule}
 * @date 2018/7/22
 * @copyright 杭州物恋网科技有限公司
 **/
public class PopoOrder {
    private final int[] SERQUENCE = {4,3,1,2,5,5,5};
    public void bubbleSort() {
        int temp = 0; // 用来交换的临时数

        // 要遍历的次数
        for (int i = 0; i < SERQUENCE.length - 1; i++) {
            // 从后向前依次的比较相邻两个数的大小，遍历一次后，把数组中第i小的数放在第i个位置上
            for (int j = SERQUENCE.length - 1; j > i; j--) {
                // 比较相邻的元素，如果前面的数大于后面的数，则交换
                if (SERQUENCE[j - 1] > SERQUENCE[j]) {
                    temp = SERQUENCE[j - 1];
                    SERQUENCE[j - 1] = SERQUENCE[j];
                    SERQUENCE[j] = temp;
                }
                printAll();
            }

            System.out.format("第 %d 趟：\t", i);
            printAll();
        }
    }

    /**
     * 加入isSortOver 变量来检查排序完成后 直接跳出
     * */
    public  void bubbleSortPower(){
        //根据一次排序中没有位置交换来判断序列是否生成
        boolean isSortOver = false;

        for(int i=0 ;i<SERQUENCE.length-1;i++){

            int temp = 0;
            isSortOver = true;
            for(int j = SERQUENCE.length-1;j>i;j--){
                if (SERQUENCE[j]<SERQUENCE[j-1]){
                    temp = SERQUENCE[j];
                    SERQUENCE[j] = SERQUENCE[j-1];
                    SERQUENCE[j-1] = temp;
                    isSortOver = false;
                }
            }

            if(isSortOver){
                break;
            }
            System.out.format("第 %d 趟：\t", i);
            printAll();
        }
    }


    private void printAll(){

        for(int i =0;i<=SERQUENCE.length-1;i++){
            System.out.print(SERQUENCE[i]+"\t");
        }
        System.out.println();
    }
}
